1 Introduction: Mapping of broad research field around Twin Transitions (Digital & Sustainable)

Here are preliminary results of the bibliometric mapping of the research field. Its purpose is:

The method for the research-field-mapping can be reviewed here:

Rakas, M., & Hain, D. S. (2019). The state of innovation system research: What happens beneath the surface?. Research Policy, 48(9), 103787.

Note: The analysis in this document depicts the larger research field around the department, thereby all analysis results are based on the publications of the department plus related.

1.1 Seed articles

  • The methodology takes a set of self-selected seed articles as point of departure.
  • For every of these seed articles, the 2000 articles with the highest bibliographic coupling are extracted. ’ They jointly represent the larger research field.
  • The following seedds are used in this analysis

Converting your scopus collection into a bibliographic dataframe

Done!


Generating affiliation field tag AU_UN from C1:  Done!

2 General Overview over the research field

Note: This section provides basic descriptives of th identified research fielld, including number of articles over time, countries, institutions, and authors. See Technical descriptionfor additional explanations.

2.1 Main Indicators: Publications, Authors, Countries



MAIN INFORMATION ABOUT DATA

 Timespan                              1979 : 2023 
 Sources (Journals, Books, etc)        706 
 Documents                             2751 
 Annual Growth Rate %                  4.16 
 Document Average Age                  7.65 
 Average citations per doc             126.7 
 Average citations per year per doc    17.11 
 References                            162042 
 
DOCUMENT TYPES                     
                       13 
 article               2680 
 book chapter          2 
 conference paper      12 
 editorial             2 
 note                  2 
 review                33 
 short survey          7 
 
DOCUMENT CONTENTS
 Keywords Plus (ID)                    8460 
 Author's Keywords (DE)                6004 
 
AUTHORS
 Authors                               6247 
 Author Appearances                    8620 
 Authors of single-authored docs       362 
 
AUTHORS COLLABORATION
 Single-authored docs                  443 
 Documents per Author                  0.44 
 Co-Authors per Doc                    3.13 
 International co-authorships %        33.33 
 

Annual Scientific Production

Annual Percentage Growth Rate 4.16 


Most Productive Authors


Top manuscripts per citations


Corresponding Author's Countries


SCP: Single Country Publications

MCP: Multiple Country Publications


Total Citations per Country


Most Relevant Sources


Most Relevant Keywords
NA

2.2 Main institutions, journals, keywords

3 Topic modelling

Note: Here, we report the results of a BERTYopic topic-modelling (basically, clustering on words) on all title+abstract texts. Identified topics can be interpreted as broad themes in the research field. See Technical descriptionfor additional explanations.

Error in `count()`:
! Must group by variables found in `.data`.
✖ Column `label` is not found.
Backtrace:
  1. ... %>% ...
 13. dplyr:::count.data.frame(., PY, label, name = "weight")

3.1 Automated (LMM) summary

Works a bit less precise, since it only has titles and no abstracts

4 Knowledge Bases: Co-Citation network analysis

Note: This analysis refers the co-citation analysis, where the cited references and not the original publications are the unit of analysis. Identified knowledge bases can be interpreted as the knowledge foundation the field draws from. See Technical descriptionfor additional explanations.

4.1 Development

4.2 Publications per cluster

4.3 Automated (LMM) summary

Works a bit less precise, since it only has titles and no abstracts

5 Research Areas: Bibliographic coupling analysis

Note: This analysis refers the bibliographic coupling analysis, where original publications are the unit of analysis. Identified research areas can be interpreted as the field’s current research frontier. See Technical descriptionfor additional explanations.

5.1 Development

5.2 Publications by cluster

5.3 Automated (LMM) summary

5.4 Further Analysis

6 Overal interplay

6.1 Knowledge Bases, Research Areas & Topics Interaction

6.2 Joint Overview over Knowledge Bases, Research Areas, and Topics

This plot shows the connection of publications in the research areas to knowledge bases (by citations) and topics (by gamma, document-topic weight)

7 Collaboration

7.1 Collaboration network

8 Endnotes

LS0tCnRpdGxlOiAnRmllbGQgTWFwcGluZyBvZiBLbm93bGVkZ2UgU3RydWN0dXJlJwphdXRob3I6ICJEYW5pZWwgUy4gSGFpbiIKZGF0ZTogImByIGZvcm1hdChTeXMudGltZSgpLCAnJWQgJUIsICVZJylgIgpvdXRwdXQ6CiAgaHRtbF9kb2N1bWVudDoKICAgIHRvYzogbm8KICAgIHRvY19kZXB0aDogJzMnCiAgICBkZl9wcmludDogcGFnZWQKICBodG1sX25vdGVib29rOgogICAgdGhlbWU6IGZsYXRseQogICAgY29kZV9mb2xkaW5nOiBoaWRlCiAgICBkZl9wcmludDogcGFnZWQKICAgIG51bWJlcl9zZWN0aW9uczogeWVzCiAgICB0b2M6IG5vCiAgICB0b2NfZGVwdGg6IDMKICAgIHRvY19mbG9hdDoKICAgICAgY29sbGFwc2VkOiBubwpwYXJhbXM6CiAgaW5zdGl0dXRlOgogICAgdmFsdWU6IG51bGwKICBkZXBhcnRtZW50OgogICAgdmFsdWU6IG51bGwKLS0tCgo8IS0tLQojIEFkZCB0byBZQU1MIHdoZW4gY29tcGlsaW5nIGh0bWwgLS08IHdoZW4gcmV2aWV3aW5nIGNoYW5nZSBmaXJzdCBsaW5lIHRvOiBodG1sX25vdGVib29rCiAgaHRtbF9kb2N1bWVudDoKICAgIHRoZW1lOiBmbGF0bHkKICAgIGNvZGVfZm9sZGluZzogaGlkZQogICAgZGZfcHJpbnQ6IHBhZ2VkCiAgICBudW1iZXJfc2VjdGlvbnM6IHRydWUKICAgIHRvYzogZmFsc2UKICAgIHRvY19kZXB0aDogMwogICAgdG9jX2Zsb2F0OgogICAgICBjb2xsYXBzZWQ6IGZhbHNlCgojIEFkZCB3aGVuIGNvbXBpbGluZyBwZGYKIyBBZGQgdG8gWUFNTCB3aGVuIGNvbXBpbGluZyBodG1sCiAgIGJvb2tkb3duOjpwZGZfZG9jdW1lbnQyOiAKICAgIGZpZ19jYXB0aW9uOiB0cnVlCiAgICBudW1iZXJfc2VjdGlvbnM6IHRydWUKICAgIGdsb2JhbF9udW1iZXJpbmc6IHRydWUKLS0tPgoKCmBgYHs9aHRtbH0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KLm1haW4tY29udGFpbmVyIHsKICBtYXgtd2lkdGg6IDEyMDBweDsKICBtYXJnaW4tbGVmdDogYXV0bzsKICBtYXJnaW4tcmlnaHQ6IGF1dG87Cn0KPC9zdHlsZT4KYGBgCgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0KIyMjIEdlbmVyaWMgcHJlYW1ibGUKI3JtKGxpc3Q9bHMoKSkKU3lzLnNldGVudihMQU5HID0gImVuIikKb3B0aW9ucyhzY2lwZW4gPSA1KQoKc2V0LnNlZWQoMTMzNykKCiMjIyBMb2FkIHBhY2thZ2VzICAKIyBnZW5lcmFsCmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KG1hZ3JpdHRyKQpsaWJyYXJ5KHdpZHlyKQoKIyBLaWJsaW8gJiBOVwpsaWJyYXJ5KGJpYmxpb21ldHJpeCkKbGlicmFyeSh0aWR5Z3JhcGgpCmxpYnJhcnkoZ2dyYXBoKQpsaWJyYXJ5KGlncmFwaCkKCiMgTkxQCmxpYnJhcnkodGlkeXRleHQpCgojIERhdGF2aXoKbGlicmFyeShwbG90bHkpCmxpYnJhcnkoZ2dmb3JjZSkKbGlicmFyeShnZ3JlcGVsKQpsaWJyYXJ5KHBhdGNod29yaykKCiMgS25pdApsaWJyYXJ5KGtuaXRyKSAjIEZvciBkaXNwbGF5IG9mIHRoZSBtYXJrZG93bgpsaWJyYXJ5KGthYmxlRXh0cmEpICMgRm9yIHRhYmxlIHN0eWxpbmcKCiMgb3duIGZ1bmN0aW9ucwpzb3VyY2UoIi4uL2Z1bmN0aW9ucy9mdW5jdGlvbnNfYmFzaWMuUiIpCnNvdXJjZSgiLi4vZnVuY3Rpb25zL2Z1bmN0aW9uc19zdW1tYXJ5LlIiKQpzb3VyY2UoIi4uL2Z1bmN0aW9ucy8wMF9wYXJhbWV0ZXJzLlIiKQoKIyBLbml0ciBvcHRpb25zCmtuaXRyOjpvcHRzX2NodW5rJHNldChlY2hvID0gRkFMU0UsIAogICAgICAgICAgICAgICAgICAgICAgd2FybmluZyA9IEZBTFNFLCAKICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBGQUxTRSkKYGBgCgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+CjwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgTkVYVCBQQVJUICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+CgpgYGB7ciwgaW5jbHVkZT1GQUxTRX0KIyBXaGVuIGRvaW5nIGl0IGhlcmUgaW4gdGhlIG5vdGVib29rCnZhcl9pbnN0IDwtICdUVCcKdmFyX2RlcHQgPC0gJ3YxJwp2YXJfbGFiZWwgPC0gJ1R3aW4gVHJhbnNpdGlvbnMgKERpZ2l0YWwgJiBTdXN0YWluYWJsZSknCgojIFdoZW4gY2FsbGluZyBmcm9tIGEgaGlnaGVydCBsZXZlbCBzY3JpcHQKI3Zhcl9pbnN0IDwtIHBhcmFtcyRpbnN0aXR1dGUKI3Zhcl9kZXB0IDwtIHBhcmFtcyRkZXBhcnRtZW50CmBgYAoKIyBJbnRyb2R1Y3Rpb246IE1hcHBpbmcgb2YgYnJvYWQgcmVzZWFyY2ggZmllbGQgYXJvdW5kIGByIHZhcl9sYWJlbGAKCkhlcmUgYXJlIHByZWxpbWluYXJ5IHJlc3VsdHMgb2YgdGhlIGJpYmxpb21ldHJpYyBtYXBwaW5nIG9mIHRoZSByZXNlYXJjaCBmaWVsZC4gSXRzIHB1cnBvc2UgaXM6CgoqIFRvIG1hcCB0aGUgYnJvYWRlciByZXNlYXJjaCBjb21tdW5pdHkgYW5kIGRpc3RpbmN0IHJlc2VhcmNoIGZpZWxkIHRoZSBkZXBhcnRtZW50IGNvbnRyaWJ1dGVzIHRvLgoqIElkZW50aWZ5IGNvcmUga25vd2xlZGdlIGJhc2VzLCByZXNlYXJjaCBhcmVhcyB0cmVuZHMgYW5kIHRvcGljcy4KKiBIaWdobGlnaHQgdGhlIHBvc2l0aW9uaW5nIG9mIHRoZSBkZXBhcnRtZW50IHdpdGhpbiB0aGlzIGR5bmFtaWNzLgoKVGhlIG1ldGhvZCBmb3IgdGhlIHJlc2VhcmNoLWZpZWxkLW1hcHBpbmcgY2FuIGJlIHJldmlld2VkIGhlcmU6CgpbUmFrYXMsIE0uLCAmIEhhaW4sIEQuIFMuICgyMDE5KS4gVGhlIHN0YXRlIG9mIGlubm92YXRpb24gc3lzdGVtIHJlc2VhcmNoOiBXaGF0IGhhcHBlbnMgYmVuZWF0aCB0aGUgc3VyZmFjZT8uIFJlc2VhcmNoIFBvbGljeSwgNDgoOSksIDEwMzc4Ny5dKGh0dHBzOi8vZG9pLm9yZy8xMC4xMDE2L2oucmVzcG9sLjIwMTkuMDQuMDExKQoKKipOb3RlOioqIFRoZSBhbmFseXNpcyBpbiB0aGlzIGRvY3VtZW50IGRlcGljdHMgdGhlICpsYXJnZXIgcmVzZWFyY2ggZmllbGQqIGFyb3VuZCB0aGUgZGVwYXJ0bWVudCwgdGhlcmVieSBhbGwgYW5hbHlzaXMgcmVzdWx0cyBhcmUgYmFzZWQgb24gdGhlIHB1YmxpY2F0aW9ucyBvZiB0aGUgZGVwYXJ0bWVudCBwbHVzIHJlbGF0ZWQuCgojIyBTZWVkIGFydGljbGVzCgoqIFRoZSBtZXRob2RvbG9neSB0YWtlcyBhIHNldCBvZiBzZWxmLXNlbGVjdGVkIHNlZWQgYXJ0aWNsZXMgYXMgcG9pbnQgb2YgZGVwYXJ0dXJlLiAKKiBGb3IgZXZlcnkgb2YgdGhlc2Ugc2VlZCBhcnRpY2xlcywgdGhlIDIwMDAgYXJ0aWNsZXMgd2l0aCB0aGUgaGlnaGVzdCBiaWJsaW9ncmFwaGljIGNvdXBsaW5nIGFyZSBleHRyYWN0ZWQuCicgVGhleSBqb2ludGx5IHJlcHJlc2VudCB0aGUgbGFyZ2VyIHJlc2VhcmNoIGZpZWxkLgoqIFRoZSBmb2xsb3dpbmcgc2VlZGRzIGFyZSB1c2VkIGluIHRoaXMgYW5hbHlzaXMKCmBgYHtyfQpjb252ZXJ0MmRmKGZpbGUgPSAnLi4vZGF0YS9zY29wdXNfMDAuY3N2JywgZGJzb3VyY2UgPSAic2NvcHVzIiwgZm9ybWF0ID0gImNzdiIpICU+JSBhc190aWJibGUoKSAlPiUgc2VsZWN0KEFVLCBQWSwgVEksIFNPKQpgYGAKCjwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBORVhUIFBBUlQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+CjwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQojIExvYWQgZGF0YQpNIDwtIHJlYWRSRFMocGFzdGUwKCcuLi8uLi90ZW1wL01fJywgc3RyX3RvX2xvd2VyKHZhcl9pbnN0KSwgJ18nLCBzdHJfdG9fbG93ZXIodmFyX2RlcHQpLCAnLnJkcycpKSAlPiUgYXNfdGliYmxlKCkgJT4lIAogIGRpc3RpbmN0KFVULCAua2VlcF9hbGwgPSBUUlVFKSAlPiUgCiAgZmlsdGVyKFBZID49IFBZX21pbiwgUFkgPD0gUFlfbWF4KSAlPiUKICBncm91cF9ieShQWSkgJT4lCiAgICBtdXRhdGUoVENfY29ob3J0X3JhbmsgPSBwZXJjZW50X3JhbmsoVEMpKSAlPiUKICB1bmdyb3VwKCkgCmBgYAoKYGBge3J9CiNjb21fbGFiZWxzIDwtIHRpYmJsZShjb20gPSBOQSwgbGFiZWwgPSBOQSwgdHlwZSA9IE5BKQoKY29tX2xhYmVscyA8LSByZWFkX2NzdjIoJy4uL2RhdGEvY29tbXVuaXR5X2xhYmVsaW5nLmNzdicpICU+JSAKICBhcnJhbmdlKGNvbSkgJT4lCiAgI2ZpbHRlcihpbnN0aXR1dGUgPT0gdmFyX2luc3QsIGRlcGFydG1lbnQgPT0gdmFyX2RlcHQpICU+JSBhcnJhbmdlKGluc3RpdHV0ZSwgZGVwYXJ0bWVudCwgdHlwZSwgY29tKSAlPiUKICBtdXRhdGUobGFiZWwgPSBpZmVsc2UoaXMubmEobGFiZWwpLCBwYXN0ZTAodHlwZSwgJyAnLCBjb20sICc6IHVubGFiZWxlZCcpLCBwYXN0ZTAodHlwZSwgJyAnLCBjb20sICc6ICcsIGxhYmVsKSkpCmBgYAoKIyBHZW5lcmFsIE92ZXJ2aWV3IG92ZXIgdGhlIHJlc2VhcmNoIGZpZWxkCgoqKk5vdGU6KiogVGhpcyBzZWN0aW9uIHByb3ZpZGVzIGJhc2ljIGRlc2NyaXB0aXZlcyBvZiB0aCBpZGVudGlmaWVkIHJlc2VhcmNoIGZpZWxsZCwgaW5jbHVkaW5nIG51bWJlciBvZiBhcnRpY2xlcyBvdmVyIHRpbWUsIGNvdW50cmllcywgaW5zdGl0dXRpb25zLCBhbmQgYXV0aG9ycy4gU2VlIGBUZWNobmljYWwgZGVzY3JpcHRpb25gZm9yIGFkZGl0aW9uYWwgZXhwbGFuYXRpb25zLgoKYGBge3IsIGluY2x1ZGU9RkFMU0V9CiMgcmVzdWx0cyA8LSBiaWJsaW9BbmFseXNpcyhNLCBzZXAgPSAiOyIpCnJlc3VsdHMgPC0gcmVhZF9yZHMocGFzdGUwKCcuLi8uLi90ZW1wL01fcmVzXycsIHN0cl90b19sb3dlcih2YXJfaW5zdCksICdfJywgc3RyX3RvX2xvd2VyKHZhcl9kZXB0KSwgJy5yZHMnKSkKYGBgCgojIyBNYWluIEluZGljYXRvcnM6IFB1YmxpY2F0aW9ucywgQXV0aG9ycywgQ291bnRyaWVzIAoKYGBge3J9CnJlc3VsdHMgJT4lIHN1bW1hcnkoKQpgYGAKCmBgYHtyfQojcHJvZF9BVSA8LSBNICU+JSBhdXRob3JQcm9kT3ZlclRpbWUoayA9IDEwLCBncmFwaCA9IFRSVUUpCiNwbG90KHByb2RfQVUkZ3JhcGgpCmBgYAoKYGBge3IsIGluY2x1ZGU9RkFMU0V9CnJtKHJlc3VsdHMsIHByb2RfQVUpCmBgYAoKIyMgTWFpbiBpbnN0aXR1dGlvbnMsIGpvdXJuYWxzLCBrZXl3b3JkcwoKYGBge3IsIGZpZy53aWR0aD0xNy41LCBmaWcuaGVpZ2h0PTE3LjV9CiMgIyBpbnN0aXR1dGlvbnMsIGtleXdvcmRzLCBjaXRhdGlvbnMKTV90aHJlZWZpZWxkIDwtIHJlYWRSRFMocGFzdGUwKCcuLi8uLi90ZW1wL3RocmVlZmllbGRfJywgc3RyX3RvX2xvd2VyKHZhcl9pbnN0KSwgJ18nLCBzdHJfdG9fbG93ZXIodmFyX2RlcHQpLCAnLnJkcycpKSAKTV90aHJlZWZpZWxkCmBgYAoKCjwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBORVhUIFBBUlQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+CjwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KCiMgVG9waWMgbW9kZWxsaW5nIAoKKipOb3RlOioqIEhlcmUsIHdlIHJlcG9ydCB0aGUgcmVzdWx0cyBvZiBhIEJFUlRZb3BpYyB0b3BpYy1tb2RlbGxpbmcgKGJhc2ljYWxseSwgY2x1c3RlcmluZyBvbiB3b3Jkcykgb24gYWxsIHRpdGxlK2Fic3RyYWN0IHRleHRzLiBJZGVudGlmaWVkIHRvcGljcyBjYW4gYmUgaW50ZXJwcmV0ZWQgYXMgYnJvYWQgdGhlbWVzIGluIHRoZSByZXNlYXJjaCBmaWVsZC4gU2VlIGBUZWNobmljYWwgZGVzY3JpcHRpb25gZm9yIGFkZGl0aW9uYWwgZXhwbGFuYXRpb25zLgoKYGBge3IsIGluY2x1ZGU9RkFMU0V9Ck1fdG9wIDwtIHJlYWRSRFMocGFzdGUwKCcuLi8uLi90ZW1wL01fdG9wXycsIHN0cl90b19sb3dlcih2YXJfaW5zdCksICdfJywgc3RyX3RvX2xvd2VyKHZhcl9kZXB0KSwgJy5yZHMnKSkKYGBgCgpgYGB7ciwgaW5jbHVkZT1GQUxTRX0KY29tX25hbWVzX3RvcCA8LSB0aWJibGUoIAogIGNvbSA9IDE6KE1fdG9wICU+JSBwdWxsKGNvbSkgJT4lIG5fZGlzdGluY3QoKSksCiAgdHlwZSA9ICdUUCcsCiAgY29sID0gY29tICU+JSBnZ19jb2xvcl9zZWxlY3QocGFsID0gcGFsX3RwKSkgJT4lCiAgbGVmdF9qb2luKGNvbV9sYWJlbHMgJT4lIGZpbHRlcih0eXBlID09ICdUUCcpICU+JSBzZWxlY3QoY29tLCBsYWJlbCksIGJ5ID0gJ2NvbScpICU+JQogIG11dGF0ZShsYWJlbCA9IGlmZWxzZShpcy5uYShsYWJlbCksIHBhc3RlMCgnVFAgJywgY29tLCAnOiB1bmxhYmVsZWQnKSwgbGFiZWwpKQogICAgICAgICAgICAKIyAjIDFzdCBhbHRlcm5hdGl2ZTogTnVtYmVyIHRoZW0gMS1uCiMgcGFzdGUodHlwZSwgMToodGV4dF9sZGFfZ2FtbWEgJT4lIHB1bGwodG9waWMpICU+JSBuX2Rpc3RpbmN0KCkpKSAgICAgICAgICAgCmBgYAoKYGBge3IsIGluY2x1ZGU9RkFMU0V9Ck1fdG9wICU8PiUgIGlubmVyX2pvaW4oY29tX25hbWVzX3RvcCAlPiUgc2VsZWN0KGNvbSwgbGFiZWwsIGNvbCksIGJ5ID0gJ2NvbScpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDE1LCBmaWcuaGVpZ2h0PTcuNX0KTV90b3AgJT4lCiAgbXV0YXRlKFBZID0gYXMubnVtZXJpYyhQWSkpICU+JQogIGNvdW50KFBZLCBsYWJlbCwgbmFtZSA9ICd3ZWlnaHQnKSAlPiUKICBncm91cF9ieShQWSkgJT4lIG11dGF0ZSh3ZWlnaHRfUFkgPSBzdW0od2VpZ2h0KSkgJT4lIHVuZ3JvdXAoKSAlPiUKICBtdXRhdGUod2VpZ2h0X3JlbCA9IHdlaWdodCAvIHdlaWdodF9QWSkgJT4lCiAgc2VsZWN0KFBZLCBsYWJlbCwgd2VpZ2h0LCB3ZWlnaHRfcmVsKSAlPiUKICBmaWx0ZXIoUFkgPj0gUFlfbWluICYgUFkgPD0gUFlfbWF4KSAlPiUKICBhcnJhbmdlKFBZLCBsYWJlbCkgJT4lCiAgcGxvdF9zdW1tYXJ5X3RpbWVsaW5lKHkxID0gd2VpZ2h0LCB5MiA9IHdlaWdodF9yZWwsIHQgPSBQWSwgdF9taW4gPSBQWV9taW4sIHRfbWF4ID0gUFlfbWF4LCBieSA9IGxhYmVsLCAgbGFiZWwgPSBUUlVFLCBwYWwgPSBwYWxfdHAsIAogICAgICAgICAgICAgICAgICAgICAgICB5MV90ZXh0ID0gIlRvcGljIHBvcHVsYXJpdHkgYW5udWFseSIsIHkyX3RleHQgPSAiU2hhcmUgb2YgdG9waWMgYW5udWFsbHkiKSArCiAgcGxvdF9hbm5vdGF0aW9uKHRpdGxlID0gcGFzdGUoJ1RvcGljIE1vZGVsbGluZzonLCB2YXJfaW5zdCwgJ0ZpZWxkIGFyb3VuZCcsIHZhcl9kZXB0LCBzZXAgPSAnICcpLAogICAgICAgICAgICAgICAgICBzdWJ0aXRsZSA9IHBhc3RlKCdUaW1lZnJhbWU6JywgUFlfbWluLCAnLScsIFBZX21heCAsIHNlcCA9ICcgJyksCiAgICAgICAgICAgICAgICAgIGNhcHRpb24gPSAnQWJzb2x1dGUgdG9waWMgYXBwZWFyYW5jZSAobGVmdCksIFJlbGF0aXZlIHRvcGljIGFwcGVhcmFuY2UgKHJpZ2h0KScpCmBgYAoKIyMgQXV0b21hdGVkIChMTU0pIHN1bW1hcnkgCgpXb3JrcyBhIGJpdCBsZXNzIHByZWNpc2UsIHNpbmNlIGl0IG9ubHkgaGFzIHRpdGxlcyBhbmQgbm8gYWJzdHJhY3RzCgpgYGB7cn0KY29tX2xhYmVsc19UUCA8LSBjb21fbGFiZWxzICU+JSBmaWx0ZXIodHlwZSA9PSAnVFAnKSAlPiUKICBtdXRhdGUobGFiZWwgPSBsYWJlbCAlPiUgc3RyX3JlcGxhY2UoJyYnLCAnYW5kJykpICU+JQogIG11dGF0ZShkZXNjcmlwdGlvbiA9IAlkZXNjcmlwdGlvbiAlPiUgc3RyX3JlcGxhY2UoJyYnLCAnYW5kJykpCgpmb3IgKGkgaW4gMTpucm93KGNvbV9sYWJlbHNfVFApKSB7I2k9MQogIGNvbV9sYWJlbHNfbiA8LSBjb21fbGFiZWxzX1RQW2ksXQogIHdyaXRlTGluZXMocGFzdGUoJ0xhYmVsOicsIGNvbV9sYWJlbHNfbiRsYWJlbCwgJyBcbiAnLAogICAgICAgICdEZXNjcmlwdGlvbjonLCBjb21fbGFiZWxzX24kZGVzY3JpcHRpb24sICcgXG4gXG4gJywKICAgICAgICBjb2xsYXBzZSA9ICcgJykpCn0KYGBgCgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+CjwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgTkVYVCBQQVJUICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+CgojIEtub3dsZWRnZSBCYXNlczogQ28tQ2l0YXRpb24gbmV0d29yayBhbmFseXNpcyAKCioqTm90ZToqKiBUaGlzIGFuYWx5c2lzIHJlZmVycyB0aGUgY28tY2l0YXRpb24gYW5hbHlzaXMsIHdoZXJlIHRoZSBjaXRlZCByZWZlcmVuY2VzIGFuZCBub3QgdGhlIG9yaWdpbmFsIHB1YmxpY2F0aW9ucyBhcmUgdGhlIHVuaXQgb2YgYW5hbHlzaXMuIElkZW50aWZpZWQga25vd2xlZGdlIGJhc2VzIGNhbiBiZSBpbnRlcnByZXRlZCBhcyB0aGUga25vd2xlZGdlIGZvdW5kYXRpb24gdGhlIGZpZWxkIGRyYXdzIGZyb20uIFNlZSBgVGVjaG5pY2FsIGRlc2NyaXB0aW9uYGZvciBhZGRpdGlvbmFsIGV4cGxhbmF0aW9ucy4KCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQpDX253IDwtIHJlYWRSRFMocGFzdGUwKCcuLi8uLi90ZW1wL0NfbndfJywgc3RyX3RvX2xvd2VyKHZhcl9pbnN0KSwgJ18nLCBzdHJfdG9fbG93ZXIodmFyX2RlcHQpLCAnLnJkcycpKSAgJT4lCiAgZHJvcF9uYShjb20pCmBgYAoKYGBge3IsIGluY2x1ZGU9RkFMU0V9CmNvbV9uYW1lc19jaXQgPC0gdGliYmxlKCAKICBjb20gPSAxOihDX253ICU+JSBwdWxsKGNvbSkgJT4lIG5fZGlzdGluY3QoKSksCiAgdHlwZSA9ICdLQicsCiAgY29sID0gY29tICU+JSBnZ19jb2xvcl9zZWxlY3QocGFsID0gcGFsX2tiKSkgJT4lCiAgbGVmdF9qb2luKGNvbV9sYWJlbHMgJT4lIGZpbHRlcih0eXBlID09ICdLQicpICU+JSBzZWxlY3QoY29tLCBsYWJlbCksIGJ5ID0gJ2NvbScpICU+JQogIG11dGF0ZShsYWJlbCA9IGlmZWxzZShpcy5uYShsYWJlbCksIHBhc3RlMCgnS0IgJywgY29tLCAnOiB1bmxhYmVsZWQnKSwgbGFiZWwpKQoKIyAjIDFzdCBhbHRlcm5hdGl2ZTogTnVtYmVyIHRoZW0gMS1uCiMgcGFzdGUodHlwZSwgMTooQ19udyAlPiUgcHVsbChjb20pICU+JSBuX2Rpc3RpbmN0KCkpKQpgYGAKCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQpDX253ICU8PiUgbGVmdF9qb2luKGNvbV9uYW1lc19jaXQgJT4lIHNlbGVjdChjb20sIGxhYmVsLCBjb2wpLCBieSA9ICJjb20iKQpgYGAKCiMjIERldmVsb3BtZW50CgpgYGB7ciwgaW5jbHVkZT1GQUxTRX0KZWxfMm0gPC0gcmVhZFJEUyhwYXN0ZTAoJy4uLy4uL3RlbXAvZWxfMm1fJywgc3RyX3RvX2xvd2VyKHZhcl9pbnN0KSwgJ18nLCBzdHJfdG9fbG93ZXIodmFyX2RlcHQpLCAnLnJkcycpKSAlPiUKICBkcm9wX25hKCkKYGBgCgoKYGBge3IsIGluY2x1ZGU9RkFMU0V9CmNpdF9jb21feWVhciA8LSBlbF8ybSAlPiUKICBjb3VudChjb21fY2l0LCBQWSwgbmFtZSA9ICdUQycpICU+JQogIGdyb3VwX2J5KFBZKSAlPiUKICBtdXRhdGUoVENfcmVsID0gVEMgLyBzdW0oVEMpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgYXJyYW5nZShQWSwgY29tX2NpdCkgJT4lCiAgbGVmdF9qb2luKGNvbV9uYW1lc19jaXQgLCBieSA9IGMoJ2NvbV9jaXQnID0gJ2NvbScpKSAlPiUgCiAgY29tcGxldGUobGFiZWwsIFBZLCBmaWxsID0gbGlzdChUQyA9IDAsIFRDX3JlbCA9IDApKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSAxNSwgZmlnLmhlaWdodD03LjV9CmNpdF9jb21feWVhciAlPiUKICBwbG90X3N1bW1hcnlfdGltZWxpbmUoeTEgPSBUQywgeTIgPSBUQ19yZWwsIHQgPSBQWSwgdF9taW4gPSBQWV9taW4sIHRfbWF4ID0gUFlfbWF4LCBieSA9IGxhYmVsLCBwYWwgPSBwYWxfa2IsIGxhYmVsID0gVFJVRSwKICAgICAgICAgICAgICAgICAgICAgICAgeTFfdGV4dCA9ICJOdW1iZXIgY2l0YXRpb25zIHJlY2lldmVkIGFubnVhbGx5IiwgIHkyX3RleHQgPSAiU2hhcmUgb2YgY2l0YXRpb25zIHJlY2lldmVkIGFubnVhbGx5IikgKwogIHBsb3RfYW5ub3RhdGlvbih0aXRsZSA9IHBhc3RlKCdLbm93bGVkZ2UgQmFzZXM6JywgdmFyX2luc3QsICdGaWVsZCBhcm91bmQgRGVwdC4nLCB2YXJfZGVwdCwgc2VwID0gJyAnKSwKICAgICAgICAgICAgICAgICAgc3VidGl0bGUgPSBwYXN0ZSgnVGltZWZyYW1lOicsIFBZX21pbiwgJy0nLCBQWV9tYXggLCBzZXAgPSAnICcpLAogICAgICAgICAgICAgICAgICBjYXB0aW9uID0gJ0Fic29sdXRlIGtub3dsZWRnZSBiYXNlIGFwcGVhcmFuY2UgKGxlZnQpLCBSZWxhdGl2ZSBrbm93bGVkZ2UgYmFzZSBhcHBlYXJhbmNlIChyaWdodCknKQpgYGAKCiMjIFB1YmxpY2F0aW9ucyBwZXIgY2x1c3RlcgoKYGBge3IsIGluY2x1ZGU9RkFMU0V9CmtiX3N0YXRzIDwtIENfbncgJT4lCiAgZ3JvdXBfYnkobGFiZWwpICU+JQogIHN1bW1hcmlzZShuID0gbigpLCBkZW5zaXR5X2ludCA9ICgoc3VtKGRncl9pbnQpIC8gKG4oKSAqIChuKCkgLSAxKSkpICogMTAwKSAlPiUgcm91bmQoMykpICU+JQogIHJlbG9jYXRlKGxhYmVsLCBldmVyeXRoaW5nKCkpCmBgYAoKYGBge3J9CmtiX3N1bSA8LUNfbncgJT4lIGdyb3VwX2J5KGNvbSkgJT4lIAogIGFycmFuZ2UoY29tLCBkZXNjKGRncl9pbnQpKSAlPiUKICBtdXRhdGUobmFtZSA9IG5hbWUgJT4lIHN0cl90cnVuYygxNTApKSAlPiUKICBzbGljZV9tYXgob3JkZXJfYnkgPSBkZ3JfaW50LCBuID0gMTAsIHdpdGhfdGllcyA9IEZBTFNFKSAlPiUgCiAgdW5ncm91cCgpICU+JQogIHNlbGVjdCggbmFtZSwgZGdyX2ludCwgZGdyKSAlPiUKICBrYWJsZSgpIAoKZm9yKGkgaW4gMTpucm93KGNvbV9uYW1lc19jaXQpKXsKICBrYl9zdW0gPC0ga2Jfc3VtICU+JQogICAgcGFja19yb3dzKHBhc3RlMCgnS25vd2xlZGdlIEJhc2UgJywgaSwgJzogJywgY29tX25hbWVzX2NpdFtpLCAnbGFiZWwnXSwKICAgICAgICAgICAgICAgICAgICAgJyAgIChuID0gJywga2Jfc3RhdHNbaSwgJ24nXSwgJywgZGVuc2l0eSA9Jywga2Jfc3RhdHNbaSwgJ2RlbnNpdHlfaW50J10gJT4lIHJvdW5kKDIpLCAnKScgKSwgCiAgICAgICAgICAgICAgKGkqMTAtOSksICAoaSoxMCksIGxhYmVsX3Jvd19jc3MgPSAiYmFja2dyb3VuZC1jb2xvcjogIzY2NjsgY29sb3I6ICNmZmY7IikgCiAgfQoKa2Jfc3VtICU+JQogIGthYmxlX3N0eWxpbmcoYm9vdHN0cmFwX29wdGlvbnMgPSBjKCJzdHJpcGVkIiwgImhvdmVyIiwgImNvbmRlbnNlZCIsICJyZXNwb25zaXZlIiksIGZvbnRfc2l6ZSA9IDEwKQpgYGAKCiMjIEF1dG9tYXRlZCAoTE1NKSBzdW1tYXJ5IAoKV29ya3MgYSBiaXQgbGVzcyBwcmVjaXNlLCBzaW5jZSBpdCBvbmx5IGhhcyB0aXRsZXMgYW5kIG5vIGFic3RyYWN0cwoKYGBge3J9CmNvbV9sYWJlbHNfS0IgPC0gY29tX2xhYmVscyAlPiUgZmlsdGVyKHR5cGUgPT0gJ0tCJykgJT4lCiAgbXV0YXRlKGxhYmVsID0gbGFiZWwgJT4lIHN0cl9yZXBsYWNlKCcmJywgJ2FuZCcpKSAlPiUKICBtdXRhdGUoZGVzY3JpcHRpb24gPSAJZGVzY3JpcHRpb24gJT4lIHN0cl9yZXBsYWNlKCcmJywgJ2FuZCcpKQoKZm9yIChpIGluIDE6bnJvdyhjb21fbGFiZWxzX0tCKSkgeyNpPTEKICBjb21fbGFiZWxzX24gPC0gY29tX2xhYmVsc19LQltpLF0KICB3cml0ZUxpbmVzKHBhc3RlKCdMYWJlbDonLCBjb21fbGFiZWxzX24kbGFiZWwsICcgXG4gJywKICAgICAgICAnRGVzY3JpcHRpb246JywgY29tX2xhYmVsc19uJGRlc2NyaXB0aW9uLCAnIFxuIFxuICcsCiAgICAgICAgY29sbGFwc2UgPSAnICcpKQp9CmBgYAoKPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+CjwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIE5FWFQgUEFSVCAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+CjwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgoKIyBSZXNlYXJjaCBBcmVhczogQmlibGlvZ3JhcGhpYyBjb3VwbGluZyBhbmFseXNpcwoKKipOb3RlOioqIFRoaXMgYW5hbHlzaXMgcmVmZXJzIHRoZSBiaWJsaW9ncmFwaGljIGNvdXBsaW5nIGFuYWx5c2lzLCB3aGVyZSBvcmlnaW5hbCBwdWJsaWNhdGlvbnMgYXJlIHRoZSB1bml0IG9mIGFuYWx5c2lzLiBJZGVudGlmaWVkIHJlc2VhcmNoIGFyZWFzIGNhbiBiZSBpbnRlcnByZXRlZCBhcyB0aGUgZmllbGQncyBjdXJyZW50IHJlc2VhcmNoIGZyb250aWVyLiBTZWUgYFRlY2huaWNhbCBkZXNjcmlwdGlvbmBmb3IgYWRkaXRpb25hbCBleHBsYW5hdGlvbnMuCgojIyBEZXZlbG9wbWVudAoKYGBge3IsIGluY2x1ZGU9RkFMU0V9Ck1fYmliIDwtIHJlYWRSRFMocGFzdGUwKCcuLi8uLi90ZW1wL01fYmliXycsIHN0cl90b19sb3dlcih2YXJfaW5zdCksICdfJywgc3RyX3RvX2xvd2VyKHZhcl9kZXB0KSwgJy5yZHMnKSkgJT4lIAogIGFzX3RpYmJsZSgpICU+JQogIGRyb3BfbmEoY29tKQpgYGAKCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQpjb21fbmFtZXNfYmliIDwtIHRpYmJsZSggCiAgY29tID0gMTooTV9iaWIgJT4lIHB1bGwoY29tKSAlPiUgbl9kaXN0aW5jdCgpKSwKICB0eXBlID0gJ1JBJywKICBjb2wgPSBjb20gJT4lIGdnX2NvbG9yX3NlbGVjdChwYWwgPSBwYWxfcmEpKSAlPiUKICBsZWZ0X2pvaW4oY29tX2xhYmVscyAlPiUgZmlsdGVyKHR5cGUgPT0gJ1JBJykgJT4lIHNlbGVjdChjb20sIGxhYmVsKSwgYnkgPSAnY29tJykgJT4lCiAgbXV0YXRlKGxhYmVsID0gaWZlbHNlKGlzLm5hKGxhYmVsKSwgcGFzdGUwKCdSQSAnLCBjb20sICc6IHVubGFiZWxlZCcpLCBsYWJlbCkpCgojICMgMXN0IGFsdGVybmF0aXZlOiBOdW1iZXIgdGhlbSAxLW4KIyBwYXN0ZSh0eXBlLCAxOihNX2JpYiAlPiUgcHVsbChjb20pICU+JSBuX2Rpc3RpbmN0KCkpKQpgYGAKCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQpNX2JpYiAlPD4lIGxlZnRfam9pbihjb21fbmFtZXNfYmliICU+JSBzZWxlY3QoY29tLCBsYWJlbCwgY29sKSwgYnkgPSAiY29tIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gMTUsIGZpZy5oZWlnaHQ9Ny41fQpNX2JpYiAlPiUKICBtdXRhdGUoUFkgPSBQWSAlPiUgYXMubnVtZXJpYygpKSAlPiUKICBncm91cF9ieShsYWJlbCwgUFkpICU+JSBzdW1tYXJpc2UobiA9IG4oKSkgJT4lIHVuZ3JvdXAoKSAlPiUKICBncm91cF9ieShQWSkgJT4lIG11dGF0ZShuX1BZID0gc3VtKG4pKSAlPiUgdW5ncm91cCgpICU+JQogIG11dGF0ZShuX3JlbCA9IG4gLyBuX1BZKSAlPiUKICBzZWxlY3QobGFiZWwsIFBZLCBuLCBuX3JlbCkgJT4lCiAgYXJyYW5nZShsYWJlbCwgUFkpICU+JSAKICBjb21wbGV0ZShsYWJlbCwgUFksIGZpbGwgPSBsaXN0KG4gPSAwLCBuX3JlbCA9IDApKSAlPiUKICBwbG90X3N1bW1hcnlfdGltZWxpbmUoeTEgPSBuLCB5MiA9IG5fcmVsLCB0ID0gUFksIHRfbWluID0gUFlfbWluLCB0X21heCA9IFBZX21heCwgYnkgPSBsYWJlbCwgbGFiZWwgPSBUUlVFLCBwYWwgPSBwYWxfcmEsCiAgICAgICAgICAgICAgICAgICAgICAgIHkxX3RleHQgPSAiTnVtYmVyIHB1YmxpY2F0aW9ucyBhbm51YWxseSIsIHkyX3RleHQgPSAiU2hhcmUgb2YgcHVibGljYXRpb25zIGFubnVhbGx5IikgKwogIHBsb3RfYW5ub3RhdGlvbih0aXRsZSA9IHBhc3RlKCdSZXNlYXJjaCBBcmVhczonLCB2YXJfaW5zdCwgJ0ZpZWxkIGFyb3VuZCBEZXB0LicsIHZhcl9kZXB0LCBzZXAgPSAnICcpLAogICAgICAgICAgICAgICAgICBzdWJ0aXRsZSA9IHBhc3RlKCdUaW1lZnJhbWU6JywgUFlfbWluLCAnLScsIFBZX21heCAsIHNlcCA9ICcgJyksCiAgICAgICAgICAgICAgICAgIGNhcHRpb24gPSAnQWJzb2x1dGUgcmVzZWFyY2ggYXJlYSBhcHBlYXJhbmNlIChsZWZ0KSwgUmVsYXRpdmUgcmVzZWFyY2ggYXJlYSBhcHBlYXJhbmNlIChyaWdodCknKQpgYGAKCiMjIFB1YmxpY2F0aW9ucyBieSBjbHVzdGVyCgpgYGB7ciwgaW5jbHVkZT1GQUxTRX0KcmFfc3RhdHMgPC0gTV9iaWIgJT4lCiAgZHJvcF9uYShjb20pICU+JQogIGdyb3VwX2J5KGNvbSwgbGFiZWwpICU+JQogIHN1bW1hcmlzZShuID0gbigpLCBkZW5zaXR5X2ludCA9ICgoc3VtKGRncl9pbnQpIC8gKG4oKSAqIChuKCkgLSAxKSkpICogMTAwKSAlPiUgcm91bmQoMykpICU+JQogIHNlbGVjdChjb20sIGxhYmVsLCBldmVyeXRoaW5nKCkpCmBgYAoKYGBge3J9CnJhX3N1bSA8LSBNX2JpYiAlPiUgCiAgbGVmdF9qb2luKE0gJT4lIHNlbGVjdChVVCwgQVUsIFRJLCBUQywgREkpLCBieSA9ICdVVCcpICU+JQogIGdyb3VwX2J5KGxhYmVsKSAlPiUgCiAgbXV0YXRlKGRncl9zZWxlY3QgPSAoZGdyX2ludCAvIG1heChkZ3JfaW50KSAqIChUQyAvIG1heChUQykpKSApICU+JQogIHNsaWNlX21heChvcmRlcl9ieSA9IGRncl9zZWxlY3QsIG4gPSAxMCwgd2l0aF90aWVzID0gRkFMU0UpICU+JSAKICBtdXRhdGUoVENfeWVhciA9IChUQyAvICgyMDIxICsgMSAtIFBZKSkgJT4lIHJvdW5kKDIpLAogICAgICAgICBkZ3JfaW50ID0gZGdyX2ludCAlPiUgcm91bmQoMiksCiAgICAgICAgIEFVID0gQVUgJT4lIHN0cl90cnVuYygyNSksCiAgICAgICAgIFRJID0gVEkgJT4lIHN0cl90cnVuYygxMjUpICU+JSBwYXN0ZTAoIlsiLCAuICwgIl0oaHR0cHM6Ly9kb2kub3JnLyIsIERJLCAiKSIpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgc2VsZWN0KEFVLCBQWSwgVEksIGRncl9pbnQsIFRDLCBUQ195ZWFyKSAlPiUKICBrYWJsZSgpCgoKZm9yKGkgaW4gMTpucm93KGNvbV9uYW1lc19iaWIpKXsKICByYV9zdW0gICU8PiUKICAgIHBhY2tfcm93cyhwYXN0ZTAoJ1Jlc2VhcmNoIEFyZWEgJywgaSwgJzogJywgY29tX25hbWVzX2JpYltpLCAnbGFiZWwnXSwKICAgICAgICAgICAgICAgICAgICAgJyAgIChuID0gJywgcmFfc3RhdHNbaSwgJ24nXSwgJywgZGVuc2l0eSA9JywgcmFfc3RhdHNbaSwgJ2RlbnNpdHlfaW50J10gJT4lIHJvdW5kKDIpLCAnKScgKSwgCiAgICAgICAgICAgICAgKGkqMTAtOSksICAoaSoxMCksIGxhYmVsX3Jvd19jc3MgPSAiYmFja2dyb3VuZC1jb2xvcjogIzY2NjsgY29sb3I6ICNmZmY7IikgCiAgfQoKcmFfc3VtICU+JSBrYWJsZV9zdHlsaW5nKGJvb3RzdHJhcF9vcHRpb25zID0gYygic3RyaXBlZCIsICJob3ZlciIsICJjb25kZW5zZWQiLCAicmVzcG9uc2l2ZSIpLCBmb250X3NpemUgPSAxMCkKYGBgCgojIyBBdXRvbWF0ZWQgKExNTSkgc3VtbWFyeSAKCmBgYHtyfQpjb21fbGFiZWxzX1JBIDwtIGNvbV9sYWJlbHMgJT4lIGZpbHRlcih0eXBlID09ICdSQScpICU+JQogIG11dGF0ZShsYWJlbCA9IGxhYmVsICU+JSBzdHJfcmVwbGFjZSgnJicsICdhbmQnKSkgJT4lCiAgbXV0YXRlKGRlc2NyaXB0aW9uID0gCWRlc2NyaXB0aW9uICU+JSBzdHJfcmVwbGFjZSgnJicsICdhbmQnKSkKCmZvciAoaSBpbiAxOm5yb3coY29tX2xhYmVsc19SQSkpIHsjaT0xCiAgY29tX2xhYmVsc19uIDwtIGNvbV9sYWJlbHNfUkFbaSxdCiAgd3JpdGVMaW5lcyhwYXN0ZSgnTGFiZWw6JywgY29tX2xhYmVsc19uJGxhYmVsLCAnIFxuICcsCiAgICAgICAgJ0Rlc2NyaXB0aW9uOicsIGNvbV9sYWJlbHNfbiRkZXNjcmlwdGlvbiwgJyBcbiBcbiAnLAogICAgICAgIGNvbGxhcHNlID0gJyAnKSkKfQpgYGAKCiMjIEZ1cnRoZXIgQW5hbHlzaXMKCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQpnX2FnZyA8LSByZWFkUkRTKHBhc3RlMCgnLi4vLi4vdGVtcC9nX2JpYl9hZ2dfJywgc3RyX3RvX2xvd2VyKHZhcl9pbnN0KSwgJ18nLCBzdHJfdG9fbG93ZXIodmFyX2RlcHQpLCAnLnJkcycpKSAlTj4lCiAgYXJyYW5nZShjb20pICMgJT4lCiMgICBtdXRhdGUobmFtZSA9IG5hbWVzX3JhICU+JSBwdWxsKGNvbV9yYV9uYW1lKSwKIyAgICAgICAgICBjb2xvciA9IGNvbHNfcmEpCmBgYAoKYGBge3IsIGZpZy5oZWlnaHQ9IDcuNSwgZmlnLndpZHRoPTcuNX0KZ19hZ2cgJUU+JSAKICBmaWx0ZXIod2VpZ2h0ID4gMCAmIGZyb20gIT0gdG8pICU+JQogIGZpbHRlcih3ZWlnaHQgPj0gcXVhbnRpbGUod2VpZ2h0LCAwLjI1KSApICAlTj4lCiAgbXV0YXRlKGNvbSA9IGNvbV9uYW1lc19iaWIgJT4lIHB1bGwobGFiZWwpKSAlPiUKICBnZ3JhcGgobGF5b3V0ID0gImNpcmNsZSIpICsgCiAgZ2VvbV9lZGdlX2ZhbihzdHJlbmdodCA9IDAuOCwgYWVzKHdpZHRoID0gd2VpZ2h0KSwgYWxwaGEgPSAwLjIpICArIAogIGdlb21fbm9kZV9wb2ludChhZXMoc2l6ZSA9IE4sIGNvbG9yID0gY29tKSkgICsgCiAgZ2VvbV9ub2RlX3RleHQoYWVzKGxhYmVsID0gY29tKSwgcmVwZWwgPSBUUlVFKSArCiAgI3RoZW1lX2dyYXBoKGJhc2VfZmFtaWx5ID0gIkFyaWFsIikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKSArCiAgc2NhbGVfc2l6ZShyYW5nZSA9IGMoMiwyMCkpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9IHBhbF9yYSkgKwogIGxhYnModGl0bGUgPSBwYXN0ZSgnUmVzZWFyY2ggQXJlYSBDb25uZWN0aXZpdHk6JywgdmFyX2luc3QsICdGaWVsZCBhcm91bmQgRGVwdC4nLCB2YXJfZGVwdCwgc2VwID0gJyAnKSwKICAgICAgICAgICAgICAgICAgc3VidGl0bGUgPSBwYXN0ZSgnVGltZWZyYW1lOicsIFBZX21pbiwgJy0nLCBQWV9tYXggLCBzZXAgPSAnICcpLAogICAgICAgICAgICAgICAgICBjYXB0aW9uID0gJ05vZGVzID0gSWRlbnRpZmllZCBSZXNlYXJjaCBBcmVhczsgRWRnZXM6IEJpYmxpb2dyYXBoaWMgY291cGxpbmcgc3RyZW5naHQgKEphY2NhcmQgd2VpZ2h0ZWQpJykKYGBgCgojIE92ZXJhbCBpbnRlcnBsYXkKCiMjIEtub3dsZWRnZSBCYXNlcywgUmVzZWFyY2ggQXJlYXMgJiBUb3BpY3MgSW50ZXJhY3Rpb24KCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQojIE5vZGVzCm5sXzNtIDwtIGNvbV9uYW1lc19iaWIgJT4lCiAgYmluZF9yb3dzKGNvbV9uYW1lc19jaXQpICU+JQogIGJpbmRfcm93cyhjb21fbmFtZXNfdG9wKSAlPiUKICByZW5hbWUobmFtZSA9IGxhYmVsLAogICAgICAgICBjb21fbnIgPSBjb20pICU+JQogIHJlbG9jYXRlKG5hbWUpCgojIEVkZ2VzCmVsXzJtX2tiIDwtIGVsXzJtICU+JQogIHNlbGVjdCgtZnJvbSwgLXRvKSAlPiUKICBpbm5lcl9qb2luKGNvbV9uYW1lc19jaXQgJT4lIHNlbGVjdChjb20sIGxhYmVsKSwgYnkgPSBjKCdjb21fY2l0JyA9ICdjb20nKSkgJT4lCiAgaW5uZXJfam9pbihjb21fbmFtZXNfYmliICU+JSBzZWxlY3QoY29tLCBsYWJlbCwgY29sKSwgYnkgPSBjKCdjb21fYmliJyA9ICdjb20nKSkgJT4lCiAgbXV0YXRlKHdlaWdodCA9IDEpICU+JQogIHJlbmFtZShmcm9tID0gbGFiZWwueCwKICAgICAgICAgdG8gPSBsYWJlbC55KSAlPiUgIyBnZW5lcmljCiAgc2VsZWN0KGZyb20sIHRvLCB3ZWlnaHQsIGNvbCkgJT4lIAogIGRyb3BfbmEoKSAlPiUgCiAgY291bnQoZnJvbSwgdG8sIGNvbCwgd3QgPSB3ZWlnaHQsIG5hbWUgPSAnd2VpZ2h0JykgJT4lCiAgZmlsdGVyKHBlcmNlbnRfcmFuayh3ZWlnaHQpID49IDAuMjUpICU+JQogIHdlaWdodF9qYWNjYXJkKGkgPSBmcm9tLCBqID0gdG8sIHcgPSB3ZWlnaHQpICU+JSAKICBzZWxlY3QoLXdlaWdodCkKCmVsXzJtX3RvcGljIDwtIE1fdG9wICU+JSBzZWxlY3QoVVQsIGxhYmVsKSAlPiUKICBsZWZ0X2pvaW4oTV9iaWIgJT4lIGRyb3BfbmEoY29tKSAlPiUgc2VsZWN0KFVULCBsYWJlbCwgY29sKSwgYnkgPSAnVVQnKSAlPiUKICByZW5hbWUoZnJvbSA9IGxhYmVsLnksCiAgICAgICAgIHRvID0gbGFiZWwueCkgJT4lICMgZ2VuZXJpYwogIHNlbGVjdChmcm9tLCB0bywgY29sKSAlPiUgCiAgZHJvcF9uYSgpICU+JSAKICBjb3VudChmcm9tLCB0bywgY29sLCAgbmFtZSA9ICd3ZWlnaHQnKSAlPiUKICBmaWx0ZXIocGVyY2VudF9yYW5rKHdlaWdodCkgPj0gMC4yNSkgJT4lCiAgd2VpZ2h0X2phY2NhcmQoaSA9IGZyb20sIGogPSB0bywgdyA9IHdlaWdodCkgJT4lIHNlbGVjdCgtd2VpZ2h0KQoKIyBncmFwaApnXzNtIDwtIGVsXzJtX2tiICU+JSAKICBiaW5kX3Jvd3MoZWxfMm1fdG9waWMpICU+JQogIGFzX3RibF9ncmFwaChkaXJlY3RlZCA9IFRSVUUpICVOPiUKICBsZWZ0X2pvaW4obmxfM20sIGJ5ID0gJ25hbWUnKSAlPiUKICBtdXRhdGUoCiAgICBsZXZlbCA9IGNhc2Vfd2hlbigKICAgICAgdHlwZSA9PSAiS0IiIH4gMSwKICAgICAgdHlwZSA9PSAiUkEiIH4gMiwKICAgICAgdHlwZSA9PSAiVFAiIH4gMyksCiAgICBjb29yZF95ID0gMC4xLAogICAgY29vcmRfeCA9IDAuMDAxICsgMS8obWF4KGxldmVsKS0xKSAqIChsZXZlbC0xKQogICAgKSAgJU4+JQogIGZpbHRlcighaXMubmEobGV2ZWwpKQpgYGAKCmBgYHtyLCBpbmNsdWRlPUZBTFNFfQojIyBCdWlsZCBzYW5rZXkgcGxvdApmaWcgPC0gcGxvdF9seSh0eXBlID0gInNhbmtleSIsIAogICAgICAgICAgICAgICBvcmllbnRhdGlvbiA9ICJoIiwKICAgICAgICAgICAgICAgYXJyYW5nZW1lbnQgPSAic25hcCIsCiAgbm9kZSA9IGxpc3QoCiAgICBsYWJlbCA9IGdfM20gJU4+JSBhc190aWJibGUoKSAlPiUgcHVsbChuYW1lKSwKICAgIHggPSBnXzNtICVOPiUgYXNfdGliYmxlKCkgJT4lIHB1bGwoY29vcmRfeCksCiAgICB5ID0gZ18zbSAlTj4lIGFzX3RpYmJsZSgpICU+JSBwdWxsKGNvb3JkX3kpLAogICAgY29sb3IgPSBnXzNtICVOPiUgYXNfdGliYmxlKCkgJT4lIHB1bGwoY29sKSwgCiAgICBwYWQgPSA0CiAgKSwgCiAgbGluayA9IGxpc3QoCiAgICBzb3VyY2UgPSAoZ18zbSAlRT4lIGFzX3RpYmJsZSgpICU+JSBwdWxsKGZyb20pKSAtMSwKICAgIHRhcmdldCA9IChnXzNtICVFPiUgYXNfdGliYmxlKCkgJT4lIHB1bGwodG8pKSAtMSwKICAgIHZhbHVlID0gIGdfM20gJUU+JSBhc190aWJibGUoKSAlPiUgcHVsbCh3ZWlnaHRfamFjKSwKICAgIGNvbG9yID0gZ18zbSAlRT4lIGFzX3RpYmJsZSgpICU+JSBwdWxsKGNvbCkgJT4lIGNvbDJyZ2IoKSAlPiUgYXMubWF0cml4KCkgJT4lIHQoKSAlPiUgYXNfdGliYmxlKCkgJT4lIAogICAgICBtdXRhdGUoY29sX3JnYiA9IHBhc3RlMCgncmdiYSgnLCByZWQsICcsJyAsIGdyZWVuLCAnLCcsIGJsdWUsICcsMC43NSknKSkgJT4lICBwdWxsKGNvbF9yZ2IpCiAgICApCikgJT4lIAogIGxheW91dCh0aXRsZSA9IHBhc3RlKCdLbm93bGVkZ2UgQmFzZXMsIFJlc2VhcmNoIEFyZWFzICYgVG9waWNzOicsIHZhcl9pbnN0LCAnRmllbGQgYXJvdW5kICcsIHZhcl9kZXB0LCBzZXAgPSAnICcpLAogICAgICAgICBtYXJnaW4gPSBsaXN0KGwgPSA1MCwgciA9IDUwLCBiID0gMTAwLCB0ID0gMTAwLCBwYWQgPSAyKSkgCmBgYAoKCiMjIEpvaW50IE92ZXJ2aWV3IG92ZXIgS25vd2xlZGdlIEJhc2VzLCBSZXNlYXJjaCBBcmVhcywgYW5kIFRvcGljcwoKVGhpcyBwbG90IHNob3dzIHRoZSBjb25uZWN0aW9uIG9mIHB1YmxpY2F0aW9ucyBpbiB0aGUgcmVzZWFyY2ggYXJlYXMgdG8ga25vd2xlZGdlIGJhc2VzIChieSBjaXRhdGlvbnMpIGFuZCB0b3BpY3MgKGJ5IGdhbW1hLCBkb2N1bWVudC10b3BpYyB3ZWlnaHQpCgpgYGB7ciwgZmlnLmhlaWdodD0gMTAsIGZpZy53aWR0aD0xNX0KZmlnCmBgYAoKCjwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KPCEtLSAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBORVhUIFBBUlQgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgLS0+CjwhLS0gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIC0tPgo8IS0tICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAtLT4KCgpgYGB7ciwgaW5jbHVkZT1GQUxTRX0Kcm0odGV4dF90aWR5LCB0ZXh0X2xkYSkKYGBgCgoKCgojIENvbGxhYm9yYXRpb24gCgpgYGB7cn0KZWxfaW5zdCA8LSByZWFkUkRTKHBhc3RlMCgnLi4vLi4vdGVtcC9lbF9pbnN0XycsIHN0cl90b19sb3dlcih2YXJfaW5zdCksICdfJywgc3RyX3RvX2xvd2VyKHZhcl9kZXB0KSwgJy5yZHMnKSkKYGBgCgoKYGBge3J9CmdfaW5zdCA8LSBlbF9pbnN0ICU+JSBhc190YmxfZ3JhcGgoZGlyZWN0ZWQgPSBGQUxTRSkgJUU+JQogIGZpbHRlcih3ZWlnaHQgPj0gY3V0b2ZfZWRnZV9jaXQgKSAlTj4lCiAgZmlsdGVyKCFub2RlX2lzX2lzb2xhdGVkKCkpCmBgYAoKIyMgQ29sbGFib3JhdGlvbiBuZXR3b3JrIAoKYGBge3IsIGZpZy5oZWlnaHQ9IDEwLCBmaWcud2lkdGg9MTV9CiMgZ2V0IGJpZ2dlc3QgY29tcG9uZW50CmNvbXBvbmVudHMgPC0gY2x1c3RlcnMoZ19pbnN0LCBtb2RlPSJ3ZWFrIikKYmlnZ2VzdF9jbHVzdGVyX2lkIDwtIHdoaWNoLm1heChjb21wb25lbnRzJGNzaXplKQp2ZXJ0X2lkcyA8LSBWKGdfaW5zdClbY29tcG9uZW50cyRtZW1iZXJzaGlwID09IGJpZ2dlc3RfY2x1c3Rlcl9pZF0KaWdyYXBoOjppbmR1Y2VkX3N1YmdyYXBoKGdfaW5zdCwgdmVydF9pZHMpCgpnX2luc3QgJU4+JSAKICBtdXRhdGUoY2VudCA9IGNlbnRyYWxpdHlfZGVncmVlKHdlaWdodHMgPSB3ZWlnaHQpKSAlPiUKICBmaWx0ZXIobmFtZSA9PSBwYXN0ZSh2YXJfaW5zdCwgdmFyX2RlcHQpICB8IHJhbmsoLWNlbnQpIDw9IDEwMCApICU+JQogIGdncmFwaChsYXlvdXQgPSAiZnIiKSArIAogIGdlb21fZWRnZV9saW5rKGFlcyh3aWR0aCA9IHdlaWdodCwKICAgICAgICAgICAgICAgICAgICAgI2NvbG9yID0gLk4oKSRuYW1lW2Zyb21dID09IHBhc3RlKHZhcl9pbnN0LCB2YXJfZGVwdCkgfCAuTigpJG5hbWVbZnJvbV0gPT0gcGFzdGUodmFyX2luc3QsIHZhcl9kZXB0KSwKICAgICAgICAgICAgICAgICAgICAgI2ZpbHRlciA9ICh3ZWlnaHQgPj0gd2VpZ2h0ICAlPiUgcXVhbnRpbGUoMC4wMSkpCiAgICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAsIGFscGhhID0gMC4yNSkgICsgCiAgZ2VvbV9ub2RlX3BvaW50KGFlcyhzaXplID0gY2VudCksIGNvbCA9ICdzdGVlbGJsdWUxJykgICsgCiAgZ2VvbV9ub2RlX3RleHQoYWVzKGxhYmVsID0gbmFtZSwgCiAgICAgICAgICAgICAgICAgICAgIHNpemUgPSBjZW50LAogICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgPSAoY2VudCA+PSBjZW50ICAlPiUgcXVhbnRpbGUoMC4yNSkpKSwgcmVwZWwgPSBUUlVFKSArCiAgI3RoZW1lX2dyYXBoKGJhc2VfZmFtaWx5ID0gIkFyaWFsIikgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICdib3R0b20nKSArCiAgc2NhbGVfZWRnZV93aWR0aF9jb250aW51b3VzKHJhbmdlID0gYygwLjUsIDUpKSAgKwogIHNjYWxlX2VkZ2VfY29sb3VyX21hbnVhbCh2YWx1ZXMgPSBjKCJncmV5IiwgInJlZCIpLCBuYW1lID0gJzFzdCBkZWdyZWUnKSArCiAgc2NhbGVfc2l6ZShyYW5nZSA9IGMoMC41LDEwKSkgCmBgYAoKCiMgRW5kbm90ZXMKCmBgYHtyfQpzZXNzaW9uSW5mbygpCmBgYAo=